import 'dart:async';

import 'package:FlutterDemo/widget/practicalextension/flutterbloc/practicale/models/CommonEntry.dart';
import 'package:FlutterDemo/widget/practicalextension/flutterbloc/practicale/resources/respository.dart';
import 'package:rxdart/rxdart.dart';

/// 参考网站： https://mp.weixin.qq.com/s/_El_rDD8QlCbR7VvGkurvA
/// BLoC 是独立处理业务逻辑，网络数据请求等等逻辑的一个模块，通过流的 Sinks, Streams 发布监听业务处理后的数据结果，其只关心业务处理，而 Widget 着重看中业务处理后的结果显示。可见，Bloc 使得业务逻辑和 UI 相分离
///
/// Stream 简单实现的 BLoC
class MoviesStreamBloc {
  final _repository = Repository();

  // 使用rxdart发布事件
  /// 流控制
  var _moviesFetcher = PublishSubject<PhoneEntry>();

  // 流
  Stream<PhoneEntry> get allMovies => _moviesFetcher.stream;

  featchAllMovies() async {
    PhoneEntry itemModel = await _repository.featchAllMovies();
    // 发布事件
    // 通过sink.add发布一个流事件
    _moviesFetcher.sink.add(itemModel);
  }

  dispose() {
    // 释放流
    _moviesFetcher.close();
  }
}
